package cn.edu.wynu.type;

public class TypeConversionDemo01 {
    public static void main(String[] args) {
        // 1.理解自动类型装换，范围小的转成范围大的
        byte a = 10;
        int b = a; // 自动类型转换
        System.out.println(a);
        System.out.println(b);

        int c = 100;// 4个字节
        double d = c;// 8个字节 自动类型转换
        System.out.println(c);
        System.out.println(d);

        char m = 'a';// 2个字节 97
        int n = m;// 4个字节 自动类型转换
        System.out.println(m);
        System.out.println(n);

        // 类型转换的注意事项
        int e = 100;
        byte f = (byte) e;
        System.out.println(e);
        System.out.println(f);

        // 2.表达式的自动类型装换
        // 不同类型的变量或者数据一起运算，先转换成同一类型
        // byte、short、char→int→long→float→double
        // 表达式的最终结果类型由表达式的最高类型决定
        byte g = 10;
        int h = 20;
        long j = 30;
        long rs = g + h + j;
        System.out.println(rs);// long类型

        double rs1 = g + h + 3.14;// double类型-3.14
        System.out.println(rs1);

        // 在表达式中，byte、short、char三种类型的数据运算，结果为int
        byte i = 10;
        short k = 20;
        int rs2 = i + k;// int类型
        System.out.println(rs2);

        // 3.理解强制类型转换，范围大的转成范围小的
        int l = 100;
        // int类型转成byte类型，精度丢失
        // byte l1 = l; // 报错
        // 也可以使用快捷键：ALT+ENTER 强制类型转换

        byte p = (byte) l;
        System.out.println(l);
        System.out.println(p);

        // 验证强制类型装换
        int s = 1500;
        byte t = (byte) s;
        System.out.println(t);// 输出的结果为-36
        // 注意事项：
        // 强制类型转换可能造成数据（丢失）溢出
        // 浮点型强转成整型，直接丢掉小数部分，保留整数部分
        double u = 3.14;
        int v = (int) u;
        System.out.println(v); // 结果为3
    }
}
